import vnode from './vnode'
import createElement from './createElement'
import patchVnode from './patchVnode'
/**
 * @param {*} oldVnode 旧虚拟节点
 * @param {*} newVnode 新虚拟节点
 */
export default function (oldVnode, newVnode) {
    // 如果oldVnode没有sel，则是非虚拟节点
    if (oldVnode.sel === undefined) {
        // console.log(oldVnode.tagName.toLowerCase())
        oldVnode = vnode(
            oldVnode.tagName.toLowerCase(), //虚拟节点名称
            {},
            [],
            undefined,
            oldVnode // 真实的dom元素
        )
    }
    // console.log(oldVnode)
    // 开始判断新旧虚拟节点
    if (oldVnode.sel !== newVnode.sel) { // 如果新老节点不是同一个节点名称，那么久暴力删除旧的节点，插入新的节点。
        // 把新的虚拟节点创建为真实dom节点
        let newVnodeElm = createElement(newVnode) // 在这里最好将创建真实dom写成一个函数，方便递归调用
        // console.log(newVnodeElm)
        let oldVnodeElm = oldVnode.elm
        if(newVnodeElm) {
            oldVnodeElm.parentNode.insertBefore(newVnodeElm, oldVnodeElm)
        }
        oldVnodeElm.parentNode.removeChild(oldVnodeElm)
    } else { // 是同一个节点，逻辑变复杂
        patchVnode(oldVnode, newVnode)
        // console.log(oldVnode)
    }
}